/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package 学习.上.递归方法;
/**
 * @description 递归方法 挺有意思~
 * @author 俊昭
 * @date 2022/3/20
 * 一个方法体 内 调用本身
 * 包含了饮食的循环 重复执行某段代码 但无需循环控制
 * 一定要已知方向不然会无限递归 陷入死循环
 *
*/
public class RecursionTest {
    public static void main(String[] args) {
        RecursionTest rt1 = new RecursionTest();
        System.out.println(rt1.getsum(100));
        System.out.println("***********************");
        System.out.println(rt1.getSum(100));
        System.out.println("***********************");
        System.out.println(rt1.getTime(10));
        System.out.println("***********************");
        System.out.println(rt1.f(10));
        System.out.println("***********************");
        System.out.println(rt1.Fibonacci(9));
        System.out.println(rt1.Fibonacci(10));
//        for (int i =0;i<=100;i++){
//            System.out.print(rt1.Fibonacci(i)+"  ");
//        }
        System.out.println("***********************");

    }
    // 计算1到100的和
    public int getsum(int n){
        int sum = 0;
        for (int i=0;i<=100;i++){
            sum+=i;
        }
        return sum;
    }
    // 递归方法求和
    public int getSum(int n){
        if (n==1){
            return 1;
        }else{
            return n+getSum(n-1);
        }
    }
    // n!
    public double getTime(double n){
        if (n==1){
            return 1;
        }else{
            return n*getTime(n-1);
        }
    }
    // 有一个数列 f（0）=0; f（1）=4; f（n+2）=2*f（n+1) +f（n） 求f（n）
//    public int findFn(int n){
//        if (n==0){
//            return 0;
//        }else if (n==1){
//            return 4;
//        }else{
//            return findFn(n+2)-2*findFn(n+1);
//        }
//
//    }//方向错误了 无限循环导致栈溢出
    // 有一个数列 f（0）=0; f（1）=4; f（n+2）=2*f（n+1) +f（n） 求f（n）
    public int f(int n){
        if (n==0){
            return 1;
        }else if (n==1){
            return 4;
        }else{
            return 2* f(n-1)+ f(n-2);
        }
    }
    //斐波那契数列
    public double Fibonacci(double n){
        if (n==0){
            return 1;
        }else if (n==1){
            return 1;
        }else{
            return Fibonacci(n-1)+Fibonacci(n-2);
        }
    }
//    // 快速排序
//    public void QuickSort(int[] a){
//
//
//
//
//    }


}
